package com.huey.utils.annotation.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/**
 * 切面类
 * @author xubo
 * @date 2022/7/12 17:01
 */
@Aspect
@Component
public class CustomCacheAspect {



    /**
     * 在方法执行之前对注解进行处理
     *
     * @param joinPoint
     * @param customCache 注解
     * @return 返回中的值
     */
    @Around("@annotation(com.huey.utils.annotation.aop.CustomCache) && @annotation(customCache)")
    public Object dealProcess(ProceedingJoinPoint joinPoint, CustomCache customCache) {
        Object result = null;

        if (customCache.key() == null) {
            System.out.println("请求异常");
            return "失败";
        }
        //TODO 业务场景会比这个复杂的多，会涉及参数的解析如key可能是#{id}这些，数据查询
        //TODO 这里做简单演示，如果key为testKey则返回 do something you like ---
        if ("testKey".equals(customCache.key())) {
            return "do something you like ---";
        }

        //执行目标方法  开始执行业务代码
        try {
            result = joinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        //如果没返回值 接口也不会有返回值
        return result;
    }



}
